﻿//#define _CRT_SECURE_NO_WARNINGS
////#include<stdio.h>
////int main()
////{
////	int a = 10;
////	int* pa = &a;//取出a的地址并存储到指针变量pa中
////	return 0;
////}
////#include <stdio.h>
////int main()
////{
////	int a = 100;
////	int* pa = &a;
////	*pa = 0;//这里pa前面的*就不是变量类型了，而是解引用操作符
////	return 0;
////}
//
////#include <stdio.h>
//////32位平台下地址是32个world位（即4个字节）
//////64位平台下地址是64个world位（即8个字节）
////int main()
////{
////	printf("%zd\n", sizeof(char*));
////	printf("%zd\n", sizeof(short*));
////	printf("%zd\n", sizeof(int*));
////	printf("%zd\n", sizeof(double*));
////	return 0;
////}
//
////代码1
////#include <stdio.h>
////int main()
////{
////	int n = 0x11223344;
////	int* pi = &n;
////	*pi = 0;
////	return 0;
////}
//// 
//////代码2
////#include <stdio.h>
////int main()
////{
////	int n = 0x11223344;
////	char* pi = (char*)&n;
////	*pi = 0;
////	return 0;
////}
//
////#include <stdio.h>
////int main()
////{
////	int n = 10;
////	char* pc = (char*)&n;
////	int* pi = &n;
////
////	printf("n:   %p\n", &n);
////	printf("pc:  %p\n", pc);
////	printf("pc+1:%p\n", pc + 1);
////	printf("pi:  %p\n", pi);
////	printf("pi+1:%p\n", pi + 1);
////	return 0;
////}
//
////#include <stdio.h>
////int main()
////{
////	int a = 10;
////	int* pa = &a;
////	char* pc = &a;
////	return 0;
////}
//
////#include <stdio.h>
////int main()
////{
////	int a = 10;
////	void* pa = &a;
////	void* pc = &a;
////
////	*pa = 10;
////	*pc = 0;
////	return 0;
////}
////
////#include<stdio.h>
////int main()
////{
////	int m = 10;
////	m = 1;//m可以被修改
////	const int n = 10;
////	n = 1;//编译器报错，m 不能被修改
////	return 0;
////}
//
////#include<stdio.h>
////int main()
////{
////	
////	const int n = 10;
////	//n = 1;//编译器报错，m 不能被修改
////	int* pn = &n;
////	*pn = 1;
////	return 0;
////}
//
////无const修饰
//void test1()
//{
//	int m = 10;
//	int n = 1;
//	int* pm = &m;
//	*pm = 10;//可以吗？
//	pm = &n;//可以吗？
//}
//
////2. const 在 * 的左边
//void test2()
//{
//	int m = 10;
//	int n = 1;
//	const int* pm = &m;
//	*pm = 10;//可以吗？
//	pm = &n;//可以吗？
//}
//
////3. const 在 * 右边
//void test3()
//{
//	int m = 10;
//	int n = 1;
//	int* const pm = &m;
//	*pm = 10;//可以吗？
//	pm = &n;//可以吗？
//}
//
////4. const 在 * 右边
//void test3()
//{
//	int m = 10;
//	int n = 1;
//	const int* const pm = &m;
//	*pm = 10;//可以吗？
//	pm = &n;//可以吗？
//}
//
//int main()
//{
//	test1();
//	test2();
//	test3();
//	test4();
//	return 0;
//}
////const如果放在* 的左边，修饰的是指针指向的内容，保证指针指向的内容不能通过指针来改变。
////但是指针变量本⾝的内容可变。
////const如果放在* 的右边，修饰的是指针变量本⾝，保证了指针变量的内容不能修改，但是指针指
////向的内容，可以通过指针改变。